package org.xx.armory.rpc;

import static org.apache.commons.lang3.StringUtils.trimToEmpty;
import static org.xx.armory.commons.Validators.notBlank;

public final class RpcCookie {
    private final String name;
    private final String value;
    private final long maxAge;
    private final String domain;
    private final String path;

    /**
     * 构造RpcCookie对象的实例。
     *
     * @param name
     *         Cookie的名字，自动去掉首尾空格。
     * @param value
     *         Cookie的值。
     * @param maxAge
     *         Cookie的过期秒数，如果此参数小于{@code 0}则表示会话结束后立刻过期，如果此参数等于{@code 0}则表示当前已过期。
     * @param domain
     *         Cookie的域名，自动去掉首尾空格，如果此参数是空字符串则表示使用请求的目标域名。
     * @param path
     *         Cookie的路径。
     * @throws IllegalArgumentException
     *         如果参数{@code name}是{@code null}或者只包含空白字符。
     */
    public RpcCookie(
            String name,
            String value,
            long maxAge,
            String domain,
            String path
    ) {
        this.name = notBlank(name, "name").trim();
        this.value = trimToEmpty(value);
        this.maxAge = maxAge;
        this.domain = trimToEmpty(domain);
        this.path = trimToEmpty(path);
    }

    /**
     * 获取Cookie的名字。
     *
     * @return Cookie的名字。
     */
    public String getName() {
        return this.name;
    }

    /**
     * 获取Cookie的值。
     *
     * @return Cookie的值。
     */
    public String getValue() {
        return this.value;
    }

    /**
     * 获取Cookie的过期时间。
     *
     * @return Cookie的过期时间。
     */
    public long getMaxAge() {
        return this.maxAge;
    }

    /**
     * 获取Cookie的域名。
     *
     * @return Cookie的域名。
     */
    public String getDomain() {
        return this.domain;
    }

    /**
     * 获取Cookie的路径。
     *
     * @return Cookie的路径。
     */
    public String getPath() {
        return this.path;
    }
}
